MVVM (Model-View-ViewModel) ডিজাইন প্যাটার্নে Styling এবং Theming ব্যবহার করে অ্যাপ্লিকেশনের UI এর দর্শনীয়তা এবং কাস্টমাইজেশন করা হয়। Styling মূলত UI উপাদানগুলোর চেহারা বা স্টাইল নির্ধারণ করে, এবং Theming অ্যাপ্লিকেশনের সারা UI এর জন্য একটি ধারাবাহিক ডিজাইন তৈরি করে। MVVM প্যাটার্নে এই দুইটি প্রযুক্তি সাধারণত View এর সাথে সম্পর্কিত, কিন্তু ViewModel এবং Model এর মধ্যে কোনো সরাসরি সম্পর্ক থাকে না।
Styling হল UI উপাদানগুলোর চেহারা কাস্টমাইজ করা, যেমন ফন্ট, রং, সীমানা, ব্যাকগ্রাউন্ড ইত্যাদি। MVVM-এ, Styling সাধারণত XAML ফাইলের মধ্যে করা হয় এবং ViewModel এর ডেটার সাথে সংযুক্ত হয়।
Dynamic Resource ব্যবহার করে, আপনি UI উপাদানগুলির স্টাইলকে ViewModel এর ডেটার উপর ভিত্তি করে পরিবর্তন করতে পারেন। যখন ViewModel এর ডেটা পরিবর্তিত হয়, তখন UI উপাদানগুলির স্টাইলও স্বয়ংক্রিয়ভাবে পরিবর্তিত হতে পারে।
<Button Content="Click Me" Background="{Binding IsButtonClicked, Converter={StaticResource BoolToColorConverter}}" />
এখানে, BoolToColorConverter
ব্যবহার করে IsButtonClicked প্রপার্টির মানের উপর ভিত্তি করে বাটনের ব্যাকগ্রাউন্ড রং পরিবর্তন হবে।
Visual State Manager এর মাধ্যমে UI উপাদানগুলির বিভিন্ন অবস্থা (যেমন হোভার, ফোকাস, ক্লিক ইত্যাদি) নির্ধারণ করা যায়। Triggers ব্যবহার করে UI এর চেহারা পরিবর্তন করা হয় যখন কোনো নির্দিষ্ট অবস্থা ঘটে।
<Button Content="Click Me">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsButtonClicked}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
এখানে, IsButtonClicked প্রপার্টি যদি True
হয়, তবে বাটনের ব্যাকগ্রাউন্ড রং Green হয়ে যাবে।
Resource Dictionaries ব্যবহার করে আপনি স্টাইল এবং রিসোর্সগুলিকে আলাদাভাবে সংরক্ষণ করতে পারেন এবং একাধিক View বা Page এ পুনঃব্যবহার করতে পারেন। এতে কোড পুনঃব্যবহারযোগ্যতা এবং মেইনটেনেবিলিটি বাড়ে।
<Application.Resources>
<ResourceDictionary>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
</Style>
</ResourceDictionary>
</Application.Resources>
<Button Content="Click Me" Style="{StaticResource ButtonStyle}" />
এখানে, ButtonStyle স্টাইলটি একাধিক বাটনে ব্যবহৃত হচ্ছে।
Theming একটি অ্যাপ্লিকেশন বা সিস্টেমের সামগ্রিক রঙ, স্টাইল এবং ডিজাইন প্যাটার্নের সেট। MVVM এ, Theming প্রয়োগের মাধ্যমে আপনি পুরো UI এর চেহারা এবং অনুভূতি কাস্টমাইজ করতে পারেন, যা ViewModel থেকে স্বাধীন থাকে।
একটি অ্যাপ্লিকেশনে Dark এবং Light থিমের জন্য, আপনি Application.Resources বা Resource Dictionaries ব্যবহার করে আলাদা থিম তৈরি করতে পারেন। থিম পরিবর্তন করার জন্য একটি Toggle বা Button ব্যবহার করা যেতে পারে যা রিসোর্স ডিকশনারি বদলাতে সাহায্য করে।
<Application.Resources>
<ResourceDictionary x:Key="LightTheme">
<SolidColorBrush x:Key="ButtonBackground" Color="LightGray"/>
</ResourceDictionary>
<ResourceDictionary x:Key="DarkTheme">
<SolidColorBrush x:Key="ButtonBackground" Color="DarkGray"/>
</ResourceDictionary>
</Application.Resources>
<Button Content="Click Me" Background="{StaticResource ButtonBackground}" />
এখানে, LightTheme এবং DarkTheme এর মধ্যে পরিবর্তন করতে আপনি ViewModel এর মাধ্যমে থিম বাছাই করতে পারেন এবং UI তে স্বয়ংক্রিয়ভাবে থিম পরিবর্তন হবে।
ViewModel এ থিমের মানের উপর ভিত্তি করে থিম পরিবর্তন করার জন্য একটি প্রোপার্টি এবং একটি কমান্ড যুক্ত করা যেতে পারে।
public class MainViewModel : INotifyPropertyChanged
{
private string _currentTheme;
public string CurrentTheme
{
get => _currentTheme;
set
{
_currentTheme = value;
OnPropertyChanged();
// Theme change logic
}
}
}
এখানে, CurrentTheme প্রোপার্টি থিম পরিবর্তন করার জন্য ব্যবহৃত হবে। XAML তে কমান্ডের মাধ্যমে থিম পরিবর্তন করার জন্য একটি বাটন ব্যবহার করা যেতে পারে।
থিম পরিবর্তনের জন্য DynamicResource ব্যবহার করা যেতে পারে যাতে UI থিম পরিবর্তন হলে স্বয়ংক্রিয়ভাবে সব উপাদান পরিবর্তিত হয়।
<Button Content="Click Me" Background="{DynamicResource ButtonBackground}" />
এখানে, ButtonBackground এর মান DynamicResource হিসাবে সংজ্ঞায়িত করা হয়েছে, যার মাধ্যমে থিম পরিবর্তনের সাথে সাথে UI তে রঙ পরিবর্তিত হবে।
Styling এবং Theming MVVM অ্যাপ্লিকেশনে ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য একটি শক্তিশালী হাতিয়ার।
Style এবং Resource Dictionary হল WPF (Windows Presentation Foundation) বা XAML ভিত্তিক অ্যাপ্লিকেশনে UI কাস্টমাইজেশন এবং রিসোর্স পরিচালনার জন্য ব্যবহৃত শক্তিশালী টুলস। এগুলি ব্যবহার করে আপনি অ্যাপ্লিকেশনের বিভিন্ন UI উপাদানের (যেমন বাটন, টেক্সটবক্স, ইত্যাদি) স্টাইল এবং রিসোর্সগুলো সেন্ট্রালাইজডভাবে এবং পুনরায় ব্যবহারযোগ্যভাবে পরিচালনা করতে পারেন।
এই টিউটোরিয়ালে Style এবং Resource Dictionary এর মৌলিক ব্যবহার এবং এর সুবিধা নিয়ে আলোচনা করা হয়েছে।
Style হল একটি XAML ট্যাগ যা নির্দিষ্ট UI উপাদানগুলির জন্য ডিফল্ট বা কাস্টমাইজড স্টাইল প্রয়োগ করতে ব্যবহৃত হয়। এটি UI উপাদানগুলির মধ্যে সাধারন প্রপার্টি সেটিং (যেমন, ব্যাকগ্রাউন্ড, ফন্ট, মার্জিন, প্যাডিং ইত্যাদি) সংজ্ঞায়িত করে এবং একাধিক উপাদানে একই স্টাইল প্রয়োগ করতে সাহায্য করে।
Style সাধারণত Button
, TextBox
ইত্যাদি UI উপাদানের জন্য সংজ্ঞায়িত করা হয়। নিচে একটি বেসিক স্টাইল উদাহরণ দেওয়া হলো:
<Window x:Class="StyleExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Style Example" Height="350" Width="525">
<Window.Resources>
<!-- Button এর জন্য স্টাইল -->
<Style x:Key="CustomButtonStyle" TargetType="Button">
<Setter Property="Background" Value="SkyBlue"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="Padding" Value="10,5"/>
<Setter Property="Margin" Value="5"/>
</Style>
</Window.Resources>
<Grid>
<!-- Button এ Custom স্টাইল প্রয়োগ -->
<Button Content="Click Me" Style="{StaticResource CustomButtonStyle}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Window>
এখানে:
TargetType="Button"
দিয়ে স্টাইলটি বাটন উপাদানের জন্য প্রযোজ্য করা হয়েছে।{StaticResource CustomButtonStyle}
এর মাধ্যমে।Resource Dictionary হল একটি XAML ফাইল বা ব্লক যেখানে বিভিন্ন রিসোর্স (যেমন স্টাইল, কালার, ব্রাশ, টেমপ্লেট ইত্যাদি) রাখা হয়। এটি বিভিন্ন UI উপাদান বা অ্যাপ্লিকেশনের মধ্যে শেয়ার করা যেতে পারে। যখন একাধিক উপাদানে একই রিসোর্স দরকার হয়, তখন Resource Dictionary ব্যবহার করা হয়।
Resource Dictionary সাধারণত Window.Resources
বা Application.Resources
ব্লকের মধ্যে রাখা হয়। এটি একটি অ্যাপ্লিকেশনে সাধারণত একাধিক রিসোর্স সেন্ট্রালাইজডভাবে ব্যবস্থাপনা করার জন্য ব্যবহৃত হয়।
<Application x:Class="ResourceDictionaryExample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<!-- স্টাইল এবং রিসোর্স রাখা -->
<ResourceDictionary>
<Style x:Key="PrimaryButtonStyle" TargetType="Button">
<Setter Property="Background" Value="DarkBlue"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Padding" Value="8,4"/>
</Style>
<SolidColorBrush x:Key="ButtonBrush" Color="RoyalBlue"/>
</ResourceDictionary>
</Application.Resources>
</Application>
এখানে, একটি Resource Dictionary এ দুটি রিসোর্স (স্টাইল এবং ব্রাশ) সংজ্ঞায়িত করা হয়েছে। অ্যাপ্লিকেশনটি যখন শুরু হয়, তখন এই রিসোর্সগুলো অ্যাপ্লিকেশনের যেকোনো অংশে ব্যবহার করা যাবে।
<Button Content="Click Me" Style="{StaticResource PrimaryButtonStyle}" Background="{StaticResource ButtonBrush}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
এখানে, PrimaryButtonStyle
এবং ButtonBrush
রিসোর্সগুলি StaticResource ডিক্লারেশন ব্যবহার করে Button এ প্রয়োগ করা হয়েছে।
Style এবং Resource Dictionary হল XAML ভিত্তিক অ্যাপ্লিকেশন ডিজাইনে UI কাস্টমাইজেশনের গুরুত্বপূর্ণ অংশ। Style ব্যবহার করে একাধিক UI উপাদানের মধ্যে একে অপরের সাদৃশ্য বজায় রাখা যায়, আর Resource Dictionary ব্যবহার করে একই রিসোর্স অ্যাপ্লিকেশনের বিভিন্ন জায়গায় শেয়ার করা সম্ভব হয়। এর মাধ্যমে অ্যাপ্লিকেশনের UI কোড আরও পরিষ্কার, সংহত এবং পুনঃব্যবহারযোগ্য হয়।
Dynamic Resource এবং Static Resource হল WPF (Windows Presentation Foundation)-এর দুটি প্রধান কনসেপ্ট যা UI উপাদানগুলির স্টাইল, টেমপ্লেট, এবং বৈশিষ্ট্যগুলিকে ব্যবস্থাপনা করার জন্য ব্যবহৃত হয়। এই দুটি রিসোর্সের মধ্যে প্রধান পার্থক্য হল, Dynamic Resource এমন একটি রিসোর্স যেটি রানটাইমে পরিবর্তিত হতে পারে, যেখানে Static Resource এমন একটি রিসোর্স যা কম্পাইল টাইমে নির্ধারিত এবং পরিবর্তনযোগ্য নয়।
এগুলোর সাহায্যে অ্যাপ্লিকেশনটির UI কাস্টমাইজ এবং রিইউজ করা সহজ হয়। চলুন, এই দুটি রিসোর্স কীভাবে ব্যবহার করা যায়, তা বিস্তারিতভাবে দেখি।
Static Resource হল এমন একটি রিসোর্স যেটি কম্পাইল টাইমে একবার লোড হয়ে যায় এবং পরে সেটি পরিবর্তিত হয় না। এটি XAML-এ ব্যবহার করা হয় যখন আপনি UI উপাদানের জন্য নির্দিষ্ট এক রিসোর্স বা বৈশিষ্ট্য ব্যবহার করতে চান, যা কেবল একবার নির্ধারিত হয় এবং পরবর্তীতে পরিবর্তিত হয় না।
<Window x:Class="StaticResourceExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Static Resource Example" Height="350" Width="525">
<Window.Resources>
<!-- Static Resource Definition -->
<SolidColorBrush x:Key="ButtonBackgroundColor" Color="Blue"/>
</Window.Resources>
<Grid>
<Button Content="Click Me" Background="{StaticResource ButtonBackgroundColor}" Width="100" Height="50"/>
</Grid>
</Window>
এখানে:
Background
প্রপার্টিতে ব্যবহার করা হয়েছে।Dynamic Resource হল এমন একটি রিসোর্স যেটি রানটাইমে পরিবর্তন হতে পারে। এটি এমন ক্ষেত্রে ব্যবহৃত হয় যখন UI উপাদানগুলির বৈশিষ্ট্যগুলি চলমান অ্যাপ্লিকেশনের পরিবেশ বা ব্যবহারকারীর ইন্টারঅ্যাকশনের ভিত্তিতে পরিবর্তিত হতে পারে। Dynamic Resource সাধারণত ResourceDictionary-এ ব্যবহৃত হয়, কিন্তু এটি Static Resource এর মতো কম্পাইল টাইমে নির্ধারিত হয় না এবং এটিকে পরিবর্তন করা যায়।
<Window x:Class="DynamicResourceExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Dynamic Resource Example" Height="350" Width="525">
<Window.Resources>
<!-- Dynamic Resource Definition -->
<SolidColorBrush x:Key="ButtonBackgroundColor" Color="Green"/>
</Window.Resources>
<Grid>
<Button Content="Click Me" Background="{DynamicResource ButtonBackgroundColor}" Width="100" Height="50"/>
</Grid>
</Window>
এখানে:
Background
প্রপার্টিতে DynamicResource হিসেবে ব্যবহার করা হয়েছে।বৈশিষ্ট্য | Static Resource | Dynamic Resource |
---|---|---|
লোড টাইম | কম্পাইল টাইমে একবার লোড হয়। | রানটাইমে লোড হয় এবং পরিবর্তিত হতে পারে। |
পরিবর্তনযোগ্যতা | পরিবর্তনযোগ্য নয়। | পরিবর্তনযোগ্য এবং রানটাইমে পরিবর্তন করা যায়। |
কার্যকরী ক্ষেত্রে | UI স্টাইল বা সেটিংস যা পরিবর্তিত হয় না। | UI বৈশিষ্ট্য যা রানটাইমে পরিবর্তিত হতে পারে। |
কোডে ব্যবহার | {StaticResource ResourceName} | {DynamicResource ResourceName} |
Dynamic Resource এর একটি বিশেষ সুবিধা হলো আপনি একাধিক রিসোর্স ব্যবহার করে অ্যাপ্লিকেশনের UI থিম বা লুক পরিবর্তন করতে পারেন।
ধরা যাক, আপনি একটি থিম পরিবর্তন করার জন্য দুটি রঙের স্কিম ব্যবহার করতে চান: একটি ডার্ক থিম এবং একটি লাইট থিম।
<Window x:Class="ThemeChangeExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Theme Change Example" Height="350" Width="525">
<Window.Resources>
<!-- Light Theme -->
<SolidColorBrush x:Key="ButtonBackgroundColor" Color="LightGray" />
<!-- Dark Theme -->
<SolidColorBrush x:Key="ButtonBackgroundColorDark" Color="DarkGray" />
</Window.Resources>
<Grid>
<Button Content="Change Theme" Background="{DynamicResource ButtonBackgroundColor}" Width="200" Height="50"/>
</Grid>
</Window>
এখন, আপনি Dynamic Resource ব্যবহার করে Button এর ব্যাকগ্রাউন্ড রঙ পরিবর্তন করতে পারেন। যেহেতু এটি DynamicResource, থিম পরিবর্তনের সময় রঙ পরিবর্তিত হবে।
Theme Changing Techniques এবং Theme Resource Setup MVVM আর্কিটেকচারে এবং সাধারণত UI ডেভেলপমেন্টে অ্যাপ্লিকেশনের থিম কাস্টমাইজেশন এবং ব্যবহারে গুরুত্বপূর্ণ ভূমিকা পালন করে। অ্যাপ্লিকেশনের থিম পরিবর্তন করতে এবং Themes এবং Resources এর মাধ্যমে ইউজার ইন্টারফেসে কাস্টমাইজেশন আনতে এই প্যাটার্ন এবং কৌশল ব্যবহার করা হয়।
এখানে Theme Changing Techniques এবং Theme Resource Setup এর উপর বিস্তারিত আলোচনা করা হয়েছে।
Theme Changing Techniques হল এমন প্রক্রিয়া যা অ্যাপ্লিকেশনের থিম (যেমন লাইট, ডার্ক থিম) পরিবর্তন করতে ব্যবহৃত হয়। MVVM বা সাধারণ UI ডেভেলপমেন্টে থিম পরিবর্তনের বিভিন্ন কৌশল রয়েছে, যার মাধ্যমে ব্যবহারকারী অ্যাপ্লিকেশনের UI রঙ, ফন্ট, লেআউট ইত্যাদি পরিবর্তন করতে পারেন।
Dynamic Resource Binding:
উদাহরণ:
<Window x:Class="MVVMExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Theme Example" Height="350" Width="525">
<Grid Background="{DynamicResource WindowBackground}">
<Button Content="Click Me" />
</Grid>
</Window>
Theme Switcher (Dark/Light Mode):
উদাহরণ:
public class ThemeSwitcher
{
public void SetDarkTheme()
{
var darkTheme = new ResourceDictionary { Source = new Uri("pack://application:,,,/Themes/DarkTheme.xaml") };
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(darkTheme);
}
public void SetLightTheme()
{
var lightTheme = new ResourceDictionary { Source = new Uri("pack://application:,,,/Themes/LightTheme.xaml") };
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(lightTheme);
}
}
এখানে, SetDarkTheme এবং SetLightTheme পদ্ধতিগুলি থিম পরিবর্তন করে, এবং UI রিসোর্সগুলি রিফ্রেশ করে নতুন থিম লোড করে।
Local Resource Dictionaries:
উদাহরণ:
<Window.Resources>
<ResourceDictionary Source="DarkTheme.xaml"/>
</Window.Resources>
Using Styles for Theming:
উদাহরণ:
<Button Style="{DynamicResource {x:Static ButtonBase.StyleKey}}">
Click Me
</Button>
Theme Resource Setup হল এমন একটি প্রক্রিয়া যার মাধ্যমে একটি অ্যাপ্লিকেশনের UI এর জন্য থিম বা রিসোর্স সেটআপ করা হয়। এটি ResourceDictionary ব্যবহার করে করা হয়, যেখানে Styles, Brushes, Colors, Fonts, Controls ইত্যাদি থিম অনুযায়ী কাস্টমাইজ করা যায়।
ResourceDictionary তৈরি করা:
উদাহরণ:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Color x:Key="PrimaryColor">#FF6200EE</Color>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource PrimaryColor}"/>
<Setter Property="Foreground" Value="White"/>
</Style>
</ResourceDictionary>
Dark Theme Resource Setup:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Color x:Key="WindowBackground">#121212</Color>
<Color x:Key="ButtonBackground">#1F1F1F</Color>
<Color x:Key="ButtonForeground">#FFFFFF</Color>
<Style TargetType="Window">
<Setter Property="Background" Value="{DynamicResource WindowBackground}" />
</Style>
<Style TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ButtonBackground}" />
<Setter Property="Foreground" Value="{DynamicResource ButtonForeground}" />
</Style>
</ResourceDictionary>
Light Theme Resource Setup:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Color x:Key="WindowBackground">#FFFFFF</Color>
<Color x:Key="ButtonBackground">#E1E1E1</Color>
<Color x:Key="ButtonForeground">#000000</Color>
<Style TargetType="Window">
<Setter Property="Background" Value="{DynamicResource WindowBackground}" />
</Style>
<Style TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ButtonBackground}" />
<Setter Property="Foreground" Value="{DynamicResource ButtonForeground}" />
</Style>
</ResourceDictionary>
Merge Resource Dictionaries for Theming:
উদাহরণ:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/LightTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
এই কৌশলগুলি অ্যাপ্লিকেশন ডিজাইন এবং UI কাস্টমাইজেশনের ক্ষেত্রে প্রয়োজনীয় সরঞ্জাম সরবরাহ করে, এবং এটি MVVM আর্কিটেকচারের মধ্যেও খুব কার্যকরী।
Control Templates এবং Custom Controls Styling হল WPF, Xamarin.Forms, এবং অন্যান্য XAML ভিত্তিক UI প্রযুক্তিতে ব্যবহৃত অত্যন্ত শক্তিশালী কৌশল, যা UI উপাদানগুলির চেহারা ও আচরণকে সম্পূর্ণভাবে কাস্টমাইজ করতে সাহায্য করে। এটি MVVM প্যাটার্নে View এর দৃশ্যমানতা এবং ইউজার ইন্টারফেসের স্টাইলিং উন্নত করার জন্য ব্যবহৃত হয়।
Control Template একটি কনটেইনার বা টেমপ্লেট যা একটি কন্ট্রোলের (যেমন Button, TextBox, CheckBox, ইত্যাদি) চেহারা এবং আচরণ কাস্টমাইজ করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি কন্ট্রোলের ডিফল্ট UI উপাদানগুলিকে সম্পূর্ণভাবে পরিবর্তন করতে পারেন, তবে কন্ট্রোলের কার্যকারিতা অপরিবর্তিত থাকে।
ধরা যাক, আপনি একটি Button কন্ট্রোলের জন্য একটি কাস্টম টেমপ্লেট তৈরি করতে চান, যা একটি গ্র্যাডিয়েন্ট ব্যাকগ্রাউন্ড, একটি অ্যানিমেটেড ট্রানজিশন এবং একটি কাস্টম বর্ডার থাকবে।
<Button Content="Click Me">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="LightBlue" BorderBrush="DarkBlue" BorderThickness="2" CornerRadius="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Button.Template>
</Button>
TargetType="Button"
দিয়ে নির্দেশ করা হয়েছে যে এটি একটি বাটনের জন্য টেমপ্লেট।এভাবে, আপনি ControlTemplate ব্যবহার করে কন্ট্রোলের চেহারা সম্পূর্ণ কাস্টমাইজ করতে পারেন, তবে এর কার্যকারিতা অপরিবর্তিত থাকে।
Custom Control হল একটি কাস্টম কন্ট্রোল যা সাধারণত UserControl-এর তুলনায় আরও শক্তিশালী এবং নমনীয়। এটি একটি সম্পূর্ণ নতুন কন্ট্রোল তৈরি করতে সাহায্য করে, যা আপনার প্রোজেক্টের বিশেষ প্রয়োজন অনুসারে তৈরি করা হয়। Custom Controls সাধারণত Control ক্লাস থেকে ইনহেরিট করা হয় এবং এতে ControlTemplate এবং অন্যান্য স্টাইলিং সমন্বিত করা যায়।
Custom Control ক্লাস তৈরি করা:
using System.Windows.Controls;
public class MyCustomButton : Control
{
static MyCustomButton()
{
// Default Style Key সেট করা
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomButton), new FrameworkPropertyMetadata(typeof(MyCustomButton)));
}
}
এখানে, MyCustomButton একটি কাস্টম কন্ট্রোল যা Control ক্লাস থেকে ইনহেরিট করেছে এবং DefaultStyleKey সেট করেছে, যাতে এটি XAML-এ একটি কাস্টম স্টাইল এবং টেমপ্লেট ব্যবহার করতে পারে।
XAML-এ Custom Control Styling:
<Style TargetType="local:MyCustomButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyCustomButton">
<Button Background="Green" Foreground="White" Content="My Custom Button" BorderBrush="Black" BorderThickness="2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
এখানে, local:MyCustomButton কাস্টম কন্ট্রোলের জন্য একটি Style এবং ControlTemplate তৈরি করা হয়েছে। এটি একটি Button এর মতো স্টাইলিং প্রদান করছে, তবে এটি আপনার কাস্টম কন্ট্রোলের মধ্যে অন্তর্ভুক্ত।
Control Template এবং Custom Controls Styling আপনাকে MVVM অ্যাপ্লিকেশনে View কাস্টমাইজ করতে একটি শক্তিশালী হাতিয়ার প্রদান করে। Control Template এর মাধ্যমে আপনি স্টাইলিং এবং লেআউট কাস্টমাইজ করতে পারেন, যখন Custom Control আপনার অ্যাপ্লিকেশনকে আরও কার্যকরী ও প্রয়োজনীয় কন্ট্রোল তৈরি করতে সাহায্য করে। এভাবে আপনি UI এবং কার্যকারিতা উভয়ই কাস্টমাইজ করে একটি উন্নত এবং নমনীয় অ্যাপ্লিকেশন তৈরি করতে পারেন।
common.read_more